//
//  LSEmotionManager.swift
//  新浪微博---01次
//
//  Created by 李宗帅 on 16/5/15.
//  Copyright © 2016年 LS. All rights reserved.
//

import UIKit

let LSEmoticonCol: Int = 7
let LSEmoticonRow: Int = 3
let LSEmoticonNum: Int = LSEmoticonCol * LSEmoticonRow - 1

class LSEmoticonManager: NSObject {
    
    // 管理表情
    // 定义成 static 为什么? 读取一次之后,就不用再重复读取
    /// 最近表情数组
    static  var recentEmoticon: [LSEmoticon] = [LSEmoticon]()
    ///  默认表情数组
    static  var defaultEmoticon: [LSEmoticon] = LSEmoticonManager.getEmoticon("com.sina.default")
    ///  emoji表情数组
    static  var emojiEmoticon: [LSEmoticon] = LSEmoticonManager.getEmoticon("com.apple.emoji")
    ///  默认表情数组
    static  var lxhEmoticon: [LSEmoticon] = LSEmoticonManager.getEmoticon("com.sina.lxh")
    
    
    
    //读取数据,就是读取plist
    // 以获取浪小花为例子
    // 不需要创建实例,所以把实例方法改成了 类方法
    //MARK:这个是一维数组: 用于读取表情哦那个
    class func getEmoticon(package: String) -> [LSEmoticon]{
        
        // 1. 获取bundle
        let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // 2. 拼接 com.sina.lxh
        let packPath = (bundlePath as NSString).stringByAppendingPathComponent(package)
        // 3. 拼接 info.plist
        let infoPath = (packPath as NSString).stringByAppendingPathComponent("info.plist")
        // 4.加载plist
        let dic = NSDictionary(contentsOfFile: infoPath)!
        
        // 5. 字典转模型
        // 5.1 先 emoticons 这个数组
        let emoticonsDic = dic["emoticons"] as! [[String: AnyObject]]
        
        // 5.2 创建一个数组用于保存 表情模型
        var temp: [LSEmoticon] = [LSEmoticon]()
        
        // 5.3 对数组进行一个遍历
        for emoticonDic in emoticonsDic{
            
            let emoticon = LSEmoticon(dic: emoticonDic)
            // 把包的路径名赋值给模型
            emoticon.package = packPath
            
            // 添加到数组里
            temp.append(emoticon)
            //            printLog(emoticon.png)
        }
        
        //        printLog(temp)
        return temp
        
    }
    
    //MARK:-- 对表情数组进行分割成二维数组
    //MARK:-- 这个是二维数组: 用于切割数组,每页显示20个表情
    class  func pageEmoticon(emotions: [LSEmoticon]) -> [[LSEmoticon]]{
        
        // 现在要对一个一维数组进行切割
        
        // 1. 计算表情的页数
        let page = (emotions.count - 1) / LSEmoticonNum + 1
        
        
        // 2. 创建一个临时的数组用于接收分割是数组
        var temp: [[LSEmoticon]] = [[LSEmoticon]]()
        
        // 分析的时候以一个实际的数字为例
        // 3. 循环进行分割
        for i in 0..<page{
            // i = 2
            // loc = 2 * 6 = 12
            // len = 6
            // loc + len = 18
            // emoticon.count = 14
            // 18>14
            // len = emoticon.count - loc
            // len = 14 - 2 * 6 = 2
            let loc = i * LSEmoticonNum
            var len = LSEmoticonNum
            
            if len + loc > emotions.count {
                
                len = emotions.count - loc
            }
            
            // 注意: 转换成 OC的数组,swift的数组满足不了我们
            // let subEmoticon: [AnyObject] 需要强制转换成 [HMEmoticon]
            let subEmoticon = (emotions as NSArray).subarrayWithRange(NSMakeRange(loc, len)) as! [LSEmoticon]
            
            //把分割好的一维数组,放到二维数组
            temp.append(subEmoticon)
            
        }
        
        return temp
    }
    
    
    // 定义方法,返回表情包数组
    //MARK:-- 这个是三维数组: 用于存放表情包
    class func getAllEmoticon() -> [[[LSEmoticon]]]{
        // 因为类型还不确定,但是可以肯定的是 他是一个数组
        //        return [AnyObject]()
        return [pageEmoticon(recentEmoticon),
            pageEmoticon(defaultEmoticon),
            pageEmoticon(emojiEmoticon),
            pageEmoticon(lxhEmoticon)]
    }
    
    
    // 添加最近表情的方法
    class func addRecent(emoticon: LSEmoticon) {
        
        // 进行排重处理, 把这个元素添加进去,判断一下这个数组有没有这个元素
        if !recentEmoticon.contains(emoticon) {
            // 把最新点击的表情放在最前边
            recentEmoticon.insert(emoticon, atIndex: 0)
            //            recentEmoticon.append(emoticon)
        }
        
        // 最近表情的个数不超过20个
        if recentEmoticon.count > 20 {
            
            recentEmoticon.removeLast()
        }
        
        // 课下的时候,可以通过 数据存储的方式 把 最近表情保存,供下次启动程序的时候使用
        
    }
    
    class func searchEmoticon(text: String) -> LSEmoticon?{
        
        // 通过 [馋嘴] -> HMEmoticon
        for emoticon in LSEmoticonManager.defaultEmoticon {
            
            if emoticon.chs == text{
                return emoticon
            }
            
        }
        
        for emoticon in LSEmoticonManager.lxhEmoticon{
            
            if emoticon.chs == text{
                return emoticon
            }
            
        }
        
        return nil
    }

}
